lexical analysis in compiler design examples